package co.com.inventarios.vista;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import co.com.inventarios.logica.IVinculadoLogica;
import co.com.inventarios.logica.VinculadoLogica;
import co.com.inventarios.modelo.Mngcco;
import co.com.inventarios.modelo.Vinculado;
import co.com.inventarios.modelo.VinculadoWork;
import co.com.inventarios.utils.MessageBundleLoader;
import co.com.inventarios.utils.SessionUtil;
import co.com.inventarios.utils.SessionVars;
import co.com.inventarios.utils.Utilidades;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.RowSelectorEvent;

public class Vinculado_MB {
	private int swestado = 0; // 0 null, 1 nuevo, 2 editando
	private HtmlCommandButton cmdelimina;
	private HtmlCommandButton cmdedita;
	private HtmlCommandButton cmdnuevo;
	private HtmlCommandButton cmdguardar;
	private HtmlCommandButton cmdcancelar;
	private HtmlCommandButton popcmdguardar;
	private HtmlCommandButton popcmdcancelar;
	private HtmlCommandButton popcmdcancelarb;
	private HtmlCommandButton cmdBuscar;
	private HtmlCommandButton cmdsielimina;
	private HtmlCommandButton cmdnoelimina;
	private String nombreEliminar;
	private HtmlInputText txtBuscar;
	private String buscar;
	private Vinculado VinculadoEdicion = new Vinculado();
	private HtmlSelectOneMenu seleconebusqueda;
	private String busbtipo;
	private VinculadoWork[] vinculadow;
	private String busquedacmbbus;
	private IVinculadoLogica Vinculado_logica;
	private Utilidades Utils;
	private List<Vinculado> listVinculado = new ArrayList<Vinculado>();

	private boolean modalRendered;
	private boolean uniselec;
	private Date fechabusca;
	private boolean busqueda1 = true;
	private boolean busqueda2 = false;
	private boolean busqueda3 = false;
	private boolean busqueda4 = false;
	private boolean busqueda5 = false;
	private int regTable;
	private String busuario = (String) SessionUtil.get(SessionVars.USER);
	private String busunombre = (String) SessionUtil.get(SessionVars.USUNOMBRE);

	public HtmlCommandButton getCmdelimina() {
		return cmdelimina;
	}

	public void setCmdelimina(HtmlCommandButton cmdelimina) {
		this.cmdelimina = cmdelimina;
	}

	public HtmlCommandButton getCmdedita() {
		return cmdedita;
	}

	public Date getFechabusca() {
		return fechabusca;
	}

	public void setFechabusca(Date fechabusca) {
		this.fechabusca = fechabusca;
	}

	public boolean isBusqueda1() {
		return busqueda1;
	}

	public void setBusqueda1(boolean busqueda1) {
		this.busqueda1 = busqueda1;
	}

	public boolean isBusqueda2() {
		return busqueda2;
	}

	public void setBusqueda2(boolean busqueda2) {
		this.busqueda2 = busqueda2;
	}

	public boolean isBusqueda3() {
		return busqueda3;
	}

	public String getBusuario() {
		return busuario;
	}

	public HtmlCommandButton getPopcmdguardar() {
		return popcmdguardar;
	}

	public void setPopcmdguardar(HtmlCommandButton popcmdguardar) {
		this.popcmdguardar = popcmdguardar;
	}

	public HtmlCommandButton getPopcmdcancelar() {
		return popcmdcancelar;
	}

	public void setPopcmdcancelar(HtmlCommandButton popcmdcancelar) {
		this.popcmdcancelar = popcmdcancelar;
	}

	public HtmlCommandButton getCmdcancelar() {
		return cmdcancelar;
	}

	public void setCmdcancelar(HtmlCommandButton cmdcancelar) {
		this.cmdcancelar = cmdcancelar;
	}

	public void setBusuario(String busuario) {
		this.busuario = busuario;
	}

	public HtmlCommandButton getCmdBuscar() {
		return cmdBuscar;
	}

	public void setCmdBuscar(HtmlCommandButton cmdBuscar) {
		this.cmdBuscar = cmdBuscar;
	}

	public HtmlCommandButton getCmdsielimina() {
		return cmdsielimina;
	}

	public void setCmdsielimina(HtmlCommandButton cmdsielimina) {
		this.cmdsielimina = cmdsielimina;
	}

	public HtmlCommandButton getCmdnoelimina() {
		return cmdnoelimina;
	}

	public void setCmdnoelimina(HtmlCommandButton cmdnoelimina) {
		this.cmdnoelimina = cmdnoelimina;
	}

	public String getBusunombre() {
		return busunombre;
	}

	public HtmlCommandButton getPopcmdcancelarb() {
		return popcmdcancelarb;
	}

	public void setPopcmdcancelarb(HtmlCommandButton popcmdcancelarb) {
		this.popcmdcancelarb = popcmdcancelarb;
	}

	public HtmlCommandButton getCmdguardar() {
		return cmdguardar;
	}

	public void setCmdguardar(HtmlCommandButton cmdguardar) {
		this.cmdguardar = cmdguardar;
	}

	public void setBusunombre(String busunombre) {
		this.busunombre = busunombre;
	}

	public void setBusqueda3(boolean busqueda3) {
		this.busqueda3 = busqueda3;
	}

	public boolean isBusqueda4() {
		return busqueda4;
	}

	public void setBusqueda4(boolean busqueda4) {
		this.busqueda4 = busqueda4;
	}

	public boolean isBusqueda5() {
		return busqueda5;
	}

	public void setBusqueda5(boolean busqueda5) {
		this.busqueda5 = busqueda5;
	}

	public boolean isUniselec() {
		return uniselec;
	}

	public void setUniselec(boolean uniselec) {
		this.uniselec = uniselec;
	}

	public boolean isModalRendered() {
		return modalRendered;
	}

	public int getRegTable() {
		return regTable;
	}

	public void setRegTable(int regTable) {
		this.regTable = regTable;
	}

	public Vinculado getVinculadoEdicion() {
		return VinculadoEdicion;
	}

	public void setVinculadoEdicion(Vinculado vinculadoEdicion) {
		VinculadoEdicion = vinculadoEdicion;
	}

	public void setModalRendered(boolean modalRendered) {
		this.modalRendered = modalRendered;
	}

	public void setCmdedita(HtmlCommandButton cmdedita) {
		this.cmdedita = cmdedita;
	}

	public HtmlCommandButton getCmdnuevo() {
		return cmdnuevo;
	}

	public void setCmdnuevo(HtmlCommandButton cmdnuevo) {
		this.cmdnuevo = cmdnuevo;
	}

	public String getNombreEliminar() {
		return nombreEliminar;
	}

	public void setNombreEliminar(String nombreEliminar) {
		this.nombreEliminar = nombreEliminar;
	}

	public HtmlInputText getTxtBuscar() {
		return txtBuscar;
	}

	public void setTxtBuscar(HtmlInputText txtBuscar) {
		this.txtBuscar = txtBuscar;
	}

	public String getBuscar() {
		return buscar;
	}

	public void setBuscar(String buscar) {
		this.buscar = buscar;
	}

	public HtmlSelectOneMenu getSeleconebusqueda() {
		return seleconebusqueda;
	}

	public void setSeleconebusqueda(HtmlSelectOneMenu seleconebusqueda) {
		this.seleconebusqueda = seleconebusqueda;
	}

	public String getBusbtipo() {
		return busbtipo;
	}

	public void setBusbtipo(String busbtipo) {
		this.busbtipo = busbtipo;
	}

	public void setlistVinculado(List<Vinculado> listVinculado) {
		this.listVinculado = listVinculado;
	}

	public List<Vinculado> getlistVinculado() {
		return listVinculado;
	}

	public Utilidades getUtils() {
		return Utils;
	}

	public void setUtils(Utilidades utils) {
		Utils = utils;
	}

	public void setVinculadow(VinculadoWork[] vinculadow) {
		this.vinculadow = vinculadow;
	}

	public VinculadoWork[] getVinculadow() {
		Vinculado_logica = new VinculadoLogica();
		if (vinculadow == null) {
			try {
				if (listVinculado.size() > 0) {
					vinculadow = Vinculado_logica
							.findVinculadoSelectedRow(listVinculado);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return vinculadow;
	}

	public String getBusquedacmbbus() {
		return busquedacmbbus;
	}

	public void setBusquedacmbbus(String busquedacmbbus) {
		this.busquedacmbbus = busquedacmbbus;
	}

	public void rowSelectionListener(RowSelectorEvent event) {
		VinculadoWork regUnimed = null;
		VinculadoWork[] lista = getVinculadow();
		uniselec = true;
		for (int i = 0; i < getVinculadow().length; i++) {
			regUnimed = lista[i];
			if (regUnimed.isSelected()) {
				VinculadoEdicion = regUnimed.getVinculadow();
				regTable = i;
			}
		}
	}

	public void action_selecBusqueda(ValueChangeEvent vcex) {

		if (vcex.getNewValue() != null) {
			
			busquedacmbbus = vcex.getNewValue().toString();

			if (busquedacmbbus.equals("docnumero")) {
				busqueda1 = true;
				busqueda2 = false;
				busqueda3 = false;
				busqueda4 = false;
				busqueda5 = false;
			} else {
				if (busquedacmbbus.equals("docfecha")) {
					busqueda1 = false;
					busqueda2 = false;
					busqueda3 = true;
					busqueda4 = false;
					busqueda5 = false;
					Date today = new Date();
					fechabusca = today;
				} else {
					if (busquedacmbbus.equals("docestado")) {
						busqueda1 = false;
						busqueda2 = true;
						busqueda3 = false;
						busqueda4 = false;
						busqueda5 = false;
					} else {
						if (busquedacmbbus.equals("docbodent")) {
							busqueda1 = false;
							busqueda2 = false;
							busqueda3 = false;
							busqueda4 = true;
							busqueda5 = false;
						} else {
							busqueda1 = false;
							busqueda2 = false;
							busqueda3 = false;
							busqueda4 = false;
							busqueda5 = false;

						}
					}
				}
			}
		}

	}

	public void action_Buscar(ActionEvent ae) {

		Vinculado_logica = new VinculadoLogica();
		uniselec = false;
		listVinculado = null;
		listVinculado = new ArrayList<Vinculado>();
		List<Vinculado> temp = new ArrayList<Vinculado>();
		temp.clear();
		try {
			if (busquedacmbbus.equals("vincedula")) {
				if (buscar.length() > 0) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscar));

//					listVinculado = new ArrayList<Vinculado>();
//					List<Vinculado> temp = new ArrayList<Vinculado>();
					temp = Vinculado_logica.findByPropertyAll("vincedula",
							buscar, "");
					for (Vinculado vinculado : temp) {
						listVinculado.add(vinculado);
					}
					vinculadow = null;
				} else {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe Agregar un valor de busqueda"));
				}

			} else {
				if (busquedacmbbus.equals("vinnombre")) {

					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Nombre :" + buscar));

//					listVinculado = new ArrayList<Vinculado>();
//					List<Vinculado> temp = new ArrayList<Vinculado>();
					temp = Vinculado_logica.findByPropertyAll("vinnombre",
							buscar, "");
					for (Vinculado vinculado : temp) {
						listVinculado.add(vinculado);
					}
					vinculadow = null;

				} else {

					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Todos."));

//					listVinculado = new ArrayList<Vinculado>();
//					List<Vinculado> temp = new ArrayList<Vinculado>();
					temp = Vinculado_logica.findAll("");
					for (Vinculado vinculado : temp) {
						listVinculado.add(vinculado);
					}
					vinculadow = null;

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void Activapopupeliminar(ActionEvent ae) {
		modalRendered = !modalRendered;
	}

	public void action_confirmacionEliminar(ActionEvent ae) {
		if (uniselec == true) {
			if (vinculadow != null) {
				Vinculado_logica = new VinculadoLogica();
				try {
					setNombreEliminar("Vinculado Cedula :"
							+ VinculadoEdicion.getVincedula() + " Nombre :"
							+ VinculadoEdicion.getVinnombre());
				} catch (Exception e) {
					e.printStackTrace();
				}
				Activapopupeliminar(ae);
			} else {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Debe seleccionar un Vinculado"));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar un Vinculado"));
		}
	}

	public void action_EliminarTabla(ActionEvent ae) {
		Vinculado_logica = new VinculadoLogica();
		Activapopupeliminar(ae);
		if (VinculadoEdicion == null  || uniselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar un Vinculado"));
		} else {
			try {
				Vinculado_logica.Eliminar_Vinculado(VinculadoEdicion);
				listVinculado.remove(regTable);
				vinculadow = null;
				uniselec = false;
				VinculadoEdicion = null;
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Registro eliminado Satisfactoriamente."));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro, tiene movimiento."));
			}
		}
	}

	// //////////////////////////
	// ////////////////////////// Vinculado Propiedades //
	// ////////////////////////
	// //////////////////////////

	private HtmlInputText txtcodigo;
	private HtmlInputText txtnombre;
	private HtmlInputText txtusunombre;
	private HtmlInputText txtusuario;
	private boolean sweditando;
	private boolean swnuevo;
	private boolean bactivo;
	private boolean bcliente;
	private boolean bproveedor;
	private boolean modalRenderedguardar;
	private boolean modalRenderedcancelar;
	private String bcodigo;
	private String bnombre;
	private Vinculado MiVinculado;

	public HtmlInputText getTxtcodigo() {
		return txtcodigo;
	}

	public void setTxtcodigo(HtmlInputText txtcodigo) {
		this.txtcodigo = txtcodigo;
	}

	public HtmlInputText getTxtnombre() {
		return txtnombre;
	}

	public void setTxtnombre(HtmlInputText txtnombre) {
		this.txtnombre = txtnombre;
	}

	public HtmlInputText getTxtusunombre() {
		return txtusunombre;
	}

	public void setTxtusunombre(HtmlInputText txtusunombre) {
		this.txtusunombre = txtusunombre;
	}

	public HtmlInputText getTxtusuario() {
		return txtusuario;
	}

	public void setTxtusuario(HtmlInputText txtusuario) {
		this.txtusuario = txtusuario;
	}

	public boolean isSweditando() {
		return sweditando;
	}

	public void setSweditando(boolean sweditando) {
		this.sweditando = sweditando;
	}

	public boolean isSwnuevo() {
		return swnuevo;
	}

	public void setSwnuevo(boolean swnuevo) {
		this.swnuevo = swnuevo;
	}

	public boolean isBactivo() {
		return bactivo;
	}

	public String getBcodigo() {
		return bcodigo;
	}

	public void setBcodigo(String bcodigo) {
		this.bcodigo = bcodigo;
	}

	public String getBnombre() {
		return bnombre;
	}

	public void setBnombre(String bnombre) {
		this.bnombre = bnombre;
	}

	public Vinculado getMiVinculado() {
		return MiVinculado;
	}

	public boolean isBcliente() {
		return bcliente;
	}

	public void setBcliente(boolean bcliente) {
		this.bcliente = bcliente;
	}

	public boolean isBproveedor() {
		return bproveedor;
	}

	public void setBproveedor(boolean bproveedor) {
		this.bproveedor = bproveedor;
	}

	public void setMiVinculado(Vinculado miVinculado) {
		MiVinculado = miVinculado;
	}

	public void setBactivo(boolean bactivo) {
		this.bactivo = bactivo;
	}

	public boolean isModalRenderedguardar() {
		return modalRenderedguardar;
	}

	public void setModalRenderedguardar(boolean modalRenderedguardar) {
		this.modalRenderedguardar = modalRenderedguardar;
	}

	public boolean isModalRenderedcancelar() {
		return modalRenderedcancelar;
	}

	public void setModalRenderedcancelar(boolean modalRenderedcancelar) {
		this.modalRenderedcancelar = modalRenderedcancelar;
	}

	public int getSwestado() {
		return swestado;
	}

	public void setSwestado(int swestado) {
		this.swestado = swestado;
	}

	public String action_modificar() {
		swnuevo = false;
		sweditando = true;
		return "";
	}

	public void validaId(ActionEvent ae) {
		try {

			MiVinculado = null;
			MiVinculado = new Vinculado();
			Vinculado_logica = new VinculadoLogica();
			MiVinculado = Vinculado_logica.consultarRegVinculado(bcodigo);
			// System.out.print(bcodigo);
			if (MiVinculado != null) {

				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Esta Cedula De Vinculado ya existe"));
				bcodigo = null;
				MiVinculado = null;
			} else {
				txtnombre.requestFocus();
			}
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	public void toggleModalguardar(ActionEvent ae) {
		try {
			MiVinculado = null;
			MiVinculado = new Vinculado();
			Vinculado_logica = new VinculadoLogica();
			MiVinculado = Vinculado_logica.consultarRegVinculado(bcodigo);

		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		if (MiVinculado != null && swnuevo == true) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Esta Cedula de Vinculado ya existe"));
			bcodigo = null;
		} else {
			if (bcodigo == "" || bcodigo == null) {
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Debe agregar una Cedula Para el Vinculado"));
			} else {
				if (bnombre == "" || bnombre == null) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe agregar un Nombre El Vinculado"));
				} else {
					modalRenderedguardar = !modalRenderedguardar;
				}
			}
		}

	}

	public void toggleModalcancelar(ActionEvent ae) {
		modalRenderedcancelar = !modalRenderedcancelar;
	}

	public String action_salir() {
		return "Vinculado_B";
	}

	// action_Cancelar
	public String action_cancelar() {
		modalRenderedcancelar = !modalRenderedcancelar;
		return "Vinculado_B";
	}

	public String action_guardar() {

		Vinculado_logica = new VinculadoLogica();
		String retornar = "";
		retornar = "Vinculado_B";
		MiVinculado = null;
		MiVinculado = new Vinculado();

		if (swnuevo == true) {
			Utils = new Utilidades();
			MiVinculado.setVincedula(bcodigo);
			retornar = "Vinculado_B";
		} else {
			try {
				MiVinculado = VinculadoEdicion;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		MiVinculado.setVinnombre(bnombre);
		if (bactivo == true) {
			MiVinculado.setVinactivo(new Long(1));
		} else {
			MiVinculado.setVinactivo(new Long(0));
		}
		if (bcliente == true) {
			MiVinculado.setVincliente(new Long(1));
		} else {
			MiVinculado.setVincliente(new Long(0));
		}
		if (bproveedor == true) {
			MiVinculado.setVinprovee(new Long(1));
		} else {
			MiVinculado.setVinprovee(new Long(0));
		}

		modalRenderedguardar = !modalRenderedguardar;

		try {
			menu_ppal_MB obje = (menu_ppal_MB)FacesUtils.getManagedBean("menu_ppal_MB");
			MiVinculado.setDlluser(obje.getMiDlluser());
			
			if (swnuevo == true) {
				MiVinculado.setVinlogfec(new Timestamp(Calendar.getInstance()
						.getTimeInMillis()));
				VinculadoEdicion = MiVinculado;
				Vinculado_logica.Guarda_Vinculado(MiVinculado);
			} else {
				Vinculado_logica.Modifica_Vinculado(MiVinculado);
			}
			listVinculado.clear();
			listVinculado.add(MiVinculado);
			vinculadow = null;
			//VinculadoEdicion = null;
			sweditando = false;
			swnuevo = false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return retornar;
	}

	public String action_Nuevo() {
		swestado = 1;
		sweditando = true;
		swnuevo = true;
		bcodigo = null;
		bnombre = null;
		bactivo = true;
		bproveedor = false;
		bcliente = true;
		return "Vinculado_P";
	}

	public String action_Editar() {

		String retornar = "";
		if (VinculadoEdicion == null ||  uniselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar un Vinculado"));
		} else {

			MiVinculado = null;
			Vinculado_logica = new VinculadoLogica();
			try {
				MiVinculado = Vinculado_logica
						.consultarRegVinculado(VinculadoEdicion.getVincedula());
				if (MiVinculado != null) {
					swestado = 2;
					sweditando = false;
					swnuevo = false;
					bcodigo = MiVinculado.getVincedula();
					bnombre = MiVinculado.getVinnombre();

					if (MiVinculado.getVinactivo().longValue() == 1) {
						bactivo = true;
					} else {
						bactivo = false;
					}

					if (MiVinculado.getVincliente().longValue() == 1) {
						bcliente = true;
					} else {
						bcliente = false;
					}

					if (MiVinculado.getVinprovee().longValue() == 1) {
						bproveedor = true;
					} else {
						bproveedor = false;
					}

					retornar = "Vinculado_P";
				}

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return retornar;

	}

}
